/**
 * 
 */
package ca.csf.dfc.poo.bots;

import java.util.HashMap;
import java.util.Random;

import ca.csf.dfc.poo.env.Case;
import ca.csf.dfc.poo.env.Direction;
import ca.csf.dfc.poo.env.Environnement;
import ca.csf.dfc.poo.env.Position;

/**
 * Robot qui choisit toujours la récompense immédiate la plus grande
 * 
 * @author Camille Besse
 *
 */
public class RobotGreedy extends Robot
{

	/**
	 * Constructeur d'initialisation.
	 * Initialise un objet Robot vorace avec une position aléatoire.
	 * 
	 * @param p_Environnement 
	 * 				Environnement dans lequel se trouve le robot
	 * @param p_r 
	 * 				Générateur de nombre aléatoires
	 */
	public RobotGreedy(Environnement p_Environnement, Random p_r)
    {
        super(p_r, p_Environnement);
    }
	
    /** 
     * Constructeur d'initialisation.
     * Initialise un objet Robot vorace avec la position donnée en paramètre.
     * 
     * @param p_position 
     * 				Position de départ
     * @param p_r 
     * 				Générateur de nombre aléatoires
     */
    public RobotGreedy(Position p_position, Random p_r)
    {
        super(p_position, p_r);
    }

    /**
     * Redéfinition.
     * @see ca.csf.dfc.poo.bots.Robot#getImage()
     */
    @Override
    public String getImage()
    {
        // TODO Auto-generated method stub
        return null;
    }

    /**
     * Redéfinition.
     * @see ca.csf.dfc.poo.bots.Robot#decider(java.util.HashMap)
     */
    @Override
    public Direction decide(HashMap<Direction, Case> p_possibles)
    {
        Direction dirChoisie = null;
        double max =  - Double.MAX_VALUE;
        
        for (Direction d : p_possibles.keySet())
        {            
            if(p_possibles.get(d).getRecompense() > max)
            {
                max = p_possibles.get(d).getRecompense();
                dirChoisie = d;
            }
            else if(p_possibles.get(d).getRecompense() == max)
                if(m_r.nextDouble() > 0.5)
                    dirChoisie = d;
        }
        
        return dirChoisie;
    }

    /**
     * Redéfinition.
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString()
    {
        return "Greedy "+super.toString();
    }

}
